package com.qianxun.module.base.rest;

import com.qianxun.export.constant.HttpCodeEnum;
import com.qianxun.framework.common.util.AssertUtil;
import com.qianxun.framework.common.util.ObjectUtil;
import com.qianxun.module.base.bo.UserInfo;
import com.qianxun.module.base.exception.ServiceInterruptionException;
import com.qianxun.module.datasource1.admin.entity.SysUser;
import com.qianxun.plugins.shiro.ShiroUtil;

/**
 * 通用接口处理
 *
 * @author: huwei
 * @date: 2020-1-17 15:46:15
 * @version: 1.3.0
 */
public abstract class BaseRestController {

    /**
     * 获取当前登录的用户信息
     * @return
     */
    protected UserInfo getCurrentUserInfo(){
       SysUser sysUser = getSysUser();
       return new UserInfo(sysUser.getId() ,sysUser.getName() ,sysUser.getCreatedKey() ,sysUser.getUsername());
    }

    /**
     * 获取当前登录的管理员用户
     * @return
     */
    protected SysUser getSysUser(){
        SysUser sysUser = ShiroUtil.getUser(SysUser.class);
        AssertUtil.notNull(sysUser ,ServiceInterruptionException.fail(HttpCodeEnum.AUTH_USER_NOT_LOGIN.getCode() ,"未登录"));
        return sysUser;
    }



    /**
     * 将当前登录 用户信息为指定对象设置创建和更新用户信息
     * @param object
     */
    protected void initUserInfo(Object object){
        initCreateUserInfo(object);
        initUpdateUserInfo(object);
    }

    /**
     * 将当前登录用户信息为指定对象设置创建用户信息
     * @param object
     */
    protected void initCreateUserInfo(Object object){
        UserInfo userInfo = getCurrentUserInfo();
        ObjectUtil.setFieldValue(object ,"createdKey" ,userInfo.getUserKey());
        ObjectUtil.setFieldValue(object ,"createdName" ,userInfo.getUsername());
    }

    /**
     * 将当前登录用户信息为指定对象设置更新用户信息
     * @param object
     */
    protected void initUpdateUserInfo(Object object){
        UserInfo userInfo = getCurrentUserInfo();
        ObjectUtil.setFieldValue(object ,"updatedKey" ,userInfo.getUserKey());
        ObjectUtil.setFieldValue(object , "updatedName" ,userInfo.getUsername());
    }
}
